
using System;
using System.Data;
using System.Linq;
using System.Linq.Dynamic;
using System.Linq.Dynamic.Core;
using System.Linq.Expressions;
using System.Threading.Tasks;
using System.Collections.Generic;
using Microsoft.EntityFrameworkCore;

using Abp.UI;
using Abp.AutoMapper;
using Abp.Authorization;
using Abp.Linq.Extensions;
using Abp.Domain.Repositories;
using Abp.Application.Services;
using Abp.Application.Services.Dto;


using JYJ.AiYard.StationManagement.TvDigitalPay.Dtos;
using JYJ.AiYard.StationManagement.TvDigitalPay;
using Microsoft.AspNetCore.Http;

namespace JYJ.AiYard.StationManagement.TvDigitalPay
{
    /// <summary>
    /// TvDigitalPay应用层服务的接口方法
    ///</summary>
    public interface ITvDigitalPayAppService : IApplicationService
    {
        /// <summary>
		/// 获取TvDigitalPay的分页列表信息
		///</summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<PagedResultDto<tVDIGITALPAYMAIN>> GetPaged(GetTvDigitalPaysInput input);


		/// <summary>
		/// 通过指定id获取TvDigitalPayListDto信息
		/// </summary>
		Task<TvDigitalPayListDto> GetById(EntityDto<long> input);

        /// <summary>
		/// 通过指定id获取TvDigitalPayListDto信息
		/// </summary>
		Task<List<TvDigitalPayDto>> GetByBillNo(long stationId, string billNo);

        /// <summary>
        /// 返回实体的EditDto
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<GetTvDigitalPayForEditOutput> GetForEdit(NullableIdDto<long> input);


        /// <summary>
        /// 添加或者修改TvDigitalPay的公共方法
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task CreateOrUpdate(CreateOrUpdateTvDigitalPayInput input);


        /// <summary>
        /// 删除TvDigitalPay信息的方法
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task Delete(EntityDto<long> input);


        /// <summary>
        /// 删除TvDigitalPay信息的方法
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task Delete2(EntityDto<long> input);

        /// <summary>
        /// 批量删除TvDigitalPay
        /// </summary>
        Task BatchDelete(List<long> input);

        /// <summary>
        /// 获取单号
        /// </summary>
        /// <param name="stationId"></param>
        /// <returns></returns>
        Task<string> GetBillNo(long stationId);

        /// <summary>
        /// 拥有导入权限
        /// </summary>
        /// <returns></returns>
        Task<userInfors> canUpload(); 

        /// <summary>
        /// 拥有审核权限
        /// </summary>
        /// <returns></returns>
        Task<userInfors> canCheck(); 

        /// <summary>
        /// 批量导入车牌
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<Dictionary<string, string>> BatchLoadCardNo(int isDigityPay, bool isEdit, long stationId, string billNo, string title, IFormFile files);
        /// <summary>
        /// 批量导入车牌
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<Dictionary<string, string>> BatchLoadCardNoByFileName(int isDigityPay, bool isEdit, string filename, long stationId, string billNo, string title, string psw);

        /// <summary>
        /// 审核
        /// </summary>
        /// <param name="stationId"></param>
        /// <param name="billNo"></param>
        /// <returns></returns>
        Task<Dictionary<string, string>> CheckByBillNo(long stationId, string billNo, string checkStatus, string checkMemo, string psw);

        /// <summary>
        /// 发送动态密码
        /// </summary>
        /// <param name="phone"></param>
        /// <returns></returns>
        Task<string> sendcmsPassword(string phone, string billno = "", int issq = 0);
        /// <summary>
        /// 开始扣款
        /// </summary>
        /// <param name="billno"></param>
        /// <returns></returns>
        Task<bool> startPayDigity(string billno, long stationId);
        /// <summary>
        /// 转换无感支付
        /// </summary>
        /// <param name="stationId"></param>
        /// <param name="billNo"></param>
        /// <returns></returns>
        Task<bool> ChangeBillWG(long stationId, string billNo);
        ///// <summary>
        //      /// 导出TvDigitalPay为excel表
        //      /// </summary>
        //      /// <returns></returns>
        //Task<FileDto> GetToExcel();

    }
}
